package com.kgc.scd.controller;

import com.kgc.scd.bean.ShopCart;
import com.kgc.scd.constant.CommonConstant;
import com.kgc.scd.service.ShopCartService;
import com.kgc.scd.util.PageSupport;
import com.kgc.scd.util.RequestResult;
import com.kgc.scd.vo.ShopCartVO;
import com.kgc.scd.vo.ShopGoodsVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;

/**
 * Created On : 2022/11/16 0016.
 * <p>
 * Author : shiguangchuan
 * <p>
 * Description: 购物车操作入口类
 */
@Slf4j
@RestController
@RequestMapping("/sgcServer")
public class ShopCartController {

    @Autowired
    private ShopCartService shopCartService;

    /**
     * @author : shiguangchuan
     * @date   : 2022/11/16 0016
     * @param  : [userId, goodsId, cartNumber]
     * @return : com.kgc.scd.util.RequestResult<?>
     * @description : 用户添加商品到购物车
     */
    @PostMapping("/insertCart")
    public boolean insertShopCart(@RequestParam String userId,
                                  @RequestParam String goodsId,
                                  @RequestParam Integer cartNumber){

        // 调用业务接口实现添加商品到购物的作用
        return shopCartService.insertShopCart(userId,goodsId,cartNumber);
    }

    /**
     * @author : shiguangchuan
     * @date   : 2022/11/16 0016
     * @param  : [userId, goodsId, cartNumber]
     * @return : boolean
     * @description : 修改购物车单品数量
     */
    @PostMapping("/updateCart")
    public boolean updateCartNumber(@RequestParam String userId,
                                    @RequestParam String goodsId,
                                    @RequestParam Integer cartNumber){

        // 调用业务接口实现修改购物车商品的数量
        return shopCartService.updateShopCartNumber(userId,goodsId,cartNumber);
    }
    
    /**
     * @author : shiguangchuan
     * @date   : 2022/11/16 0016
     * @param  : [ids]
     * @return : boolean
     * @description : 删除单个过多个购物车信息 
     */
    @PostMapping("/deleteCart")
    public boolean deleteCartByIds(@RequestParam List<String> ids){
        
        // 调用业务接口实现单个或多个删除购物车商品的操作
        return shopCartService.deleteOneOrMoreCartByIds(ids);
        
    }

    /**
     * @author : shiguangchuan
     * @date   : 2022/11/16 0016
     * @param  : [userId]
     * @return : boolean
     * @description : 删除全部购物车全部商品
     */
    @PostMapping("/deleteAllCart")
    public boolean deleteAllCart(@RequestParam String userId){

        // 调用业务接口删除全部购物车内的信息
        return shopCartService.deleteAllCartByUserId(userId);

    }

    /**
     * @author : shiguangchuan
     * @date   : 2022/11/16 0016
     * @param  : [userId, goodsId]
     * @return : boolean
     * @description : 购物车商品勾选或取消勾选操作
     */
    @PostMapping("/updateCartStatus")
    public boolean updateCartStatus(@RequestParam String id){

        // 调用业务接口修改购物车内商品是否被勾选的操作
        shopCartService.updateCartStatus(id);

        return true;

    }

    /**
     * @author : shiguangchuan
     * @date   : 2022/11/16 0016
     * @param  : [userId, allStatus]
     * @return : boolean
     * @description : 对购物车商品进行全选操作
     */
    @PostMapping("/updateAllCartStatus")
    public boolean updateAllCartStatus(@RequestParam String userId,@RequestParam Integer allStatus){

        // 调用业务接口修改购物车内商品的全部勾选状态
        shopCartService.updateAllCartStatus(userId,allStatus);

        return true;

    }

    /**
     * @author : shiguangchuan
     * @date   : 2022/11/16 0016
     * @param  : [userId]
     * @return : java.lang.Double
     * @description : 计算购物车中选中的所有商品的总价格
     */
    @GetMapping("/sumCart")
    public Double selectSumCart(@RequestParam String userId){

        // 调用业务接口计算选中的购物车商品的总价格
        return shopCartService.getSumCart(userId);

    }

    /**
     * @author : shiguangchuan
     * @date   : 2022/11/17 0017
     * @param  : [userId]
     * @return : com.kgc.scd.util.PageSupport<java.util.Map<com.kgc.scd.vo.ShopCartVO,com.kgc.scd.vo.ShopGoodsVO>>
     * @description : 用户首次进入购物车看见的购物车商品详情信息
     */
    @GetMapping("/getCartList")
    public PageSupport<List<ShopCartVO>> getCartList(@RequestParam(defaultValue = CommonConstant.DEFAULT_INIT_PAGE_NO) Integer pageNo,
                                                                 @RequestParam(defaultValue = CommonConstant.DEFAULT_INIT_PAGE_SIZE) Integer pageSize,
                                                                 @RequestParam String userId){

        // 调用查询购物车首页页面业务
        return shopCartService.getCartList(pageNo,pageSize,userId);

    }

    /**
     * @author : shiguangchuan
     * @date   : 2022/11/22
     * @param  : [userId]
     * @return : java.lang.Integer
     * @description : 通过用户id查询该用户的购物车中有多少种商品
     */
    @GetMapping("/getCartCount")
    public Long  getCartCount(@RequestParam String userId){

        // 调用查询购物车数量的业务接口
        return shopCartService.getCartCount(userId);

    }

}
